Add author and size information to output of query. Add author information to output of query options: '--patch-sets'. '--current-patch-set'. Add size information to output of query options: '--patch-sets'. '--current-patch-set'. '--files'. This information can now be retrieved by both SSH and the HTTP REST API. Change-Id: I7ef0f2dce6a4d2bd2dd2532e4bb48a22522b659a Signed-off-by: Bruce Zu <bruce.zu@sonymobile.com> 
diff --git a/Documentation/cmd-query.txt b/Documentation/cmd-query.txt index 2feea11..963d788 100644 --- a/Documentation/cmd-query.txt +++ b/Documentation/cmd-query.txt 
@@ -65,7 +65,8 @@    --files:: 	Support for listing files with patch sets and their -	attributes (ADDED, MODIFIED, DELETED, RENAMED, COPIED). +	attributes (ADDED, MODIFIED, DELETED, RENAMED, COPIED) +	and size information (number of insertions and deletions). 	Note that this option requires either the --current-patch-set 	or the --patch-sets option in order to give any file information.   
diff --git a/Documentation/json.txt b/Documentation/json.txt index aea9bac..4f86a9d 100644 --- a/Documentation/json.txt +++ b/Documentation/json.txt 
@@ -107,6 +107,8 @@    uploader:: Uploader of the patch set in <<account,account attribute>>.   +author:: Author of this patchset in <<account,account attribute>>. +  createdOn:: Time in seconds since the UNIX epoch when this patchset  was created.   @@ -116,6 +118,10 @@    files:: All changed files in this patchset in <<patch,patch attributes>>.   +sizeInsertions:: Size information of insertions of this patchset. + +sizeDeletions:: Size information of deletions of this patchset. +  [[approval]]  approval  -------- @@ -257,6 +263,9 @@    REWRITE;; Sufficient amount of content changed to claim the file was rewritten.   +insertions:: number of insertions of this patch. + +deletions:: number of deletions of this patch.    SEE ALSO  -------- 
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/change/DeprecatedChangeQueryServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/change/DeprecatedChangeQueryServlet.java index cf443e7..da21c51 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/change/DeprecatedChangeQueryServlet.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/change/DeprecatedChangeQueryServlet.java 
@@ -73,6 +73,7 @@  p.setIncludeCurrentPatchSet(get(req, "current-patch-set", false));  p.setIncludePatchSets(get(req, "patch-sets", false));  p.setIncludeApprovals(get(req, "all-approvals", false)); + p.setIncludeFiles(get(req, "files", false));  p.setOutput(rsp.getOutputStream(), format);  p.query(get(req, "q", "status:open"));  } 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java index ab3ca56..fe367cb 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java 
@@ -21,6 +21,7 @@  import com.google.gerrit.reviewdb.client.Branch;  import com.google.gerrit.reviewdb.client.Change;  import com.google.gerrit.reviewdb.client.ChangeMessage; +import com.google.gerrit.reviewdb.client.Patch;  import com.google.gerrit.reviewdb.client.PatchLineComment;  import com.google.gerrit.reviewdb.client.PatchSet;  import com.google.gerrit.reviewdb.client.PatchSetAncestor; @@ -34,6 +35,8 @@  import com.google.gerrit.server.patch.PatchListCache;  import com.google.gerrit.server.patch.PatchListEntry;  import com.google.gerrit.server.patch.PatchListNotAvailableException; +import com.google.gerrit.server.patch.PatchSetInfoFactory; +import com.google.gerrit.server.patch.PatchSetInfoNotAvailableException;  import com.google.gwtorm.server.OrmException;  import com.google.gwtorm.server.SchemaFactory;  import com.google.inject.Inject; @@ -46,8 +49,8 @@    import java.util.ArrayList;  import java.util.Collection; -import java.util.Map;  import java.util.List; +import java.util.Map;    import javax.annotation.Nullable;   @@ -59,17 +62,20 @@  private final ApprovalTypes approvalTypes;  private final PatchListCache patchListCache;  private final SchemaFactory<ReviewDb> schema; + private final PatchSetInfoFactory psInfoFactory;    @Inject  EventFactory(AccountCache accountCache,  @CanonicalWebUrl @Nullable Provider<String> urlProvider,  ApprovalTypes approvalTypes, + final PatchSetInfoFactory psif,  PatchListCache patchListCache, SchemaFactory<ReviewDb> schema) {  this.accountCache = accountCache;  this.urlProvider = urlProvider;  this.approvalTypes = approvalTypes;  this.patchListCache = patchListCache;  this.schema = schema; + this.psInfoFactory = psif;  }    /** @@ -286,6 +292,8 @@  PatchAttribute p = new PatchAttribute();  p.file = patch.getNewName();  p.type = patch.getChangeType(); + p.deletions -= patch.getDeletions(); + p.insertions = patch.getInsertions();  patchSetAttribute.files.add(p);  }  } catch (PatchListNotAvailableException e) { @@ -323,6 +331,7 @@  p.ref = patchSet.getRefName();  p.uploader = asAccountAttribute(patchSet.getUploader());  p.createdOn = patchSet.getCreatedOn().getTime() / 1000L; + final PatchSet.Id pId = patchSet.getId();  try {  final ReviewDb db = schema.open();  try { @@ -331,11 +340,28 @@  patchSet.getId())) {  p.parents.add(a.getAncestorRevision().get());  } + + p.author = asAccountAttribute(// + psInfoFactory.get(db, pId).getAuthor().getAccount()); + + Change change = db.changes().get(pId.getParentKey()); + List<Patch> list = + patchListCache.get(change, patchSet).toPatchList(pId); + for (Patch pe : list) { + if (!Patch.COMMIT_MSG.equals(pe.getFileName())) { + p.sizeDeletions -= pe.getDeletions(); + p.sizeInsertions += pe.getInsertions(); + } + }  } finally {  db.close();  }  } catch (OrmException e) {  log.error("Cannot load patch set data for " + patchSet.getId(), e); + } catch (PatchSetInfoNotAvailableException e) { + log.error(String.format("Cannot get authorEmail for %s.", pId), e); + } catch (PatchListNotAvailableException e) { + log.error(String.format("Cannot get size information for %s.", pId), e);  }  return p;  } 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java index 3802fdd..0d2b054 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchAttribute.java 
@@ -19,4 +19,6 @@  public class PatchAttribute {  public String file;  public ChangeType type; + public int insertions; + public int deletions;  } 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java index f726ce3..1123e5f 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/PatchSetAttribute.java 
@@ -23,8 +23,11 @@  public String ref;  public AccountAttribute uploader;  public Long createdOn; + public AccountAttribute author;    public List<ApprovalAttribute> approvals;  public List<PatchSetCommentAttribute> comments;  public List<PatchAttribute> files; + public int sizeInsertions; + public int sizeDeletions;  }